package packageDataAccess;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.sql.DataSource;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import packageException.DataException;
import packageException.InscriptionException;
import packageModel.Utilisateur;

/**
 *
 * @author Lionel & Julien
 */
public class InscriptionSyllathequeData {
    /**
     * Inscription d'un nouvel utilisateur
     * 
     * @param pseudo
     * @param password
     * @param passwordConf
     * @param email
     * @param nom
     * @param prenom
     * @param adresse
     * @param phone
     * @param url
     * @param isProf
     * @return Utilisateur
     * @throws InscriptionException
     * @throws DataException  
     */
    public Utilisateur inscriptionSyl(String pseudo, String password, String passwordConf, String email, String nom, String prenom, String adresse, String phone, String url, Boolean isProf) throws 
            InscriptionException,
            DataException {
        Utilisateur usr = null;
        try {
            // Connexion à la base de données
            Context ctx = new InitialContext();
            DataSource source = (DataSource) ctx.lookup("jdbc/Syllatheque");
            Connection connexion = source.getConnection();
            
            int prof;
            if(isProf == false)
                prof = 0;
            else
                prof = 1;
            
            String requeteSql = "SELECT COUNT(*) as nb FROM Utilisateur WHERE pseudo = ?";
            PreparedStatement prepStat = connexion.prepareStatement(requeteSql);          
            prepStat.setString(1, pseudo);
            
            ResultSet donnees = prepStat.executeQuery();
            donnees.next(); 
            int nb = donnees.getInt("nb");
            
            if(nb != 0) throw new InscriptionException("Ce pseudo existe déjà");
            
            // SQL
            requeteSql = "INSERT INTO "
                    + "Utilisateur(pseudo, nom, prenom, password, isProf, adresse, telephone, mail) "
                    + "VALUES(?, ?, ?, ?, ?, ?, ?, ?)";

            // Traitement
            prepStat = connexion.prepareStatement(requeteSql);          
            prepStat.setString(1, pseudo);
            prepStat.setString(2, nom);
            prepStat.setString(3, prenom);
            prepStat.setString(4, password);
            prepStat.setInt(5, prof);
            prepStat.setString(6, adresse);
            prepStat.setString(7, phone);
            prepStat.setString(8, email);
            
            prepStat.executeUpdate();
            
            usr = new Utilisateur(
                pseudo, 
                nom, 
                prenom, 
                password, 
                isProf, 
                adresse, 
                phone, 
                email
            );
            /*
             * @TODO Update d'un siteWeb
             * 
            if(!(url == null)) {
                requeteSql = "UPDATE Utilisateur SET siteWeb = ? WHERE pseudo = ?";
            
                // Traitement
                prepStat = connexion.prepareStatement(requeteSql);
                prepStat.setString(1, url);
                prepStat.setString(2, pseudo);
                
                prepStat.executeUpdate();
                usr.setSiteWeb(url);
            }*/
            
            // Fermeture de la connexion
            connexion.close();
        }
        catch(SQLException e) {
            // ERREUR
            throw new InscriptionException(e.getMessage());
        }
        catch(NamingException e) {
            // ERREUR
            throw new DataException(e.getMessage());
        }
        return usr;
    }
}